b2b91091ee7908c11c297280af6edda797eac00b,src/org/jgroups/protocols/pbcast/STABLE.java,STABLE,updateLocalDigest,#Digest#Address#,336

Before Change



        sb.append("\nmy [").append(local_addr).append("] digest after: ").append(digest).append("\n");
        sb.append("\n").append(num_elements_updated).append(" elements were updated\n");
        if(log.isTraceEnabled()) // todo: remove
            log.trace(sb);

        return num_elements_updated;
    }

After Change


        if(d == null || d.size() == 0)
            return false;

        if(!initialized) {
            if(log.isTraceEnabled())
                log.trace("STABLE message will not be handled as I'm not yet initialized");
            return false;
        }

//        if(self) {
//            if(heard_from.contains(sender)) {
//                resetHeardFromList(mbrs);
//                digest.replace(d);
//                if(log.isTraceEnabled())
//                    log.trace("initialized digest from " + d);
//                return true;
//            }
//            else
//                return false;
//        }

        if(!digest.sameSenders(d)) {
            if(log.isTraceEnabled())
                log.trace(new StringBuffer("received a digest ").append(d.printHighSeqnos()).append(" from ").
                          append(sender).append(" which has different members than mine (").
                          append(digest.printHighSeqnos()).append("), discarding it and resetting heard_from list"));
            // to avoid sending incorrect stability/stable msgs, we simply reset our heard_from list, see DESIGN
            resetDigest(mbrs);
            return false;
        }

        StringBuffer sb=null;
        if(log.isTraceEnabled())
            sb=new StringBuffer("my [").append(local_addr).append("] digest before: ").append(digest).
                    append("\ndigest from ").append(sender).append(": ").append(d).append("\n");
        Address mbr;
        long highest_seqno, my_highest_seqno, new_highest_seqno;
        long highest_seen_seqno, my_highest_seen_seqno, new_highest_seen_seqno;
        Map.Entry entry;
        org.jgroups.protocols.pbcast.Digest.Entry val;
        for(Iterator it=d.senders.entrySet().iterator(); it.hasNext();) {
            entry=(Map.Entry)it.next();
            mbr=(Address)entry.getKey();
            val=(org.jgroups.protocols.pbcast.Digest.Entry)entry.getValue();
            highest_seqno=val.high_seqno;
            highest_seen_seqno=val.high_seqno_seen;

            // compute the minimum of the highest seqnos deliverable (for garbage collection)
            my_highest_seqno=digest.highSeqnoAt(mbr);
            // compute the maximum of the highest seqnos seen (for retransmission of last missing message)
            my_highest_seen_seqno=digest.highSeqnoSeenAt(mbr);

            new_highest_seqno=Math.min(my_highest_seqno, highest_seqno);
            new_highest_seen_seqno=Math.max(my_highest_seen_seqno, highest_seen_seqno);
            digest.setHighestDeliveredAndSeenSeqnos(mbr, new_highest_seqno, new_highest_seen_seqno);
        }
        if(log.isTraceEnabled()) {
            sb.append("\nmy [").append(local_addr).append("] digest after: ").append(digest).append("\n");
            log.trace(sb);
        }
        return true;
    }